package main

import "fmt"

func main() {
	//数组的定义
	// 语法：var 关键词 数组名 = [数组长度]数组类型
	var arr1 [5]int
	arr1[0] = 1
	arr1[1] = 2
	arr1[2] = 3
	fmt.Printf("%T, arr1 = %v\n", arr1, arr1)
	// 语法：var 关键词 数组名 = [...]数组类型{元素1, 元素2, ...}
	// [...]：表示数组长度由元素个数决定
	var arr2 = [...]int{1, 2, 3, 4, 5}
	fmt.Printf("%T, arr2 = %v\n", arr1, arr2)
	// 数组的遍历
	var arr3 = [...]int{1, 2, 3, 4, 5}
	// 数组的遍历
	for i := 0; i < len(arr3); i++ {
		fmt.Printf("arr3[%d] = %d\n", i, arr3[i])
	}
	for idx, val := range arr3 {
		fmt.Printf("arr3[%d] = %d\n", idx, val)
	}

	// 什么是值类型
	var arr = [5]int{1, 2, 3}
	arr4 := arr
	arr4[0] = 100
	fmt.Println(arr, arr4)

	// 声明并初始化一个长度为3的整型数组
	originalArray := [3]int{1, 2, 3}

	// 打印原始数组的地址和值
	fmt.Printf("Original Array Address: %p, Value: %v\n", &originalArray, originalArray)

	// 将数组赋值给一个新的变量
	copiedArray := originalArray

	// 修改新数组的第一个元素
	copiedArray[0] = 100

	// 打印新数组的地址和值，以及原始数组的地址和值
	fmt.Printf("Copied Array Address: %p, Value: %v\n", &copiedArray, copiedArray)
	fmt.Printf("Original Array After Copy Address: %p, Value: %v\n", &originalArray, originalArray)
}
